// app.js
const webSocketManager = require('./utils/websocket')

App({
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    
    console.log('小程序启动')
    this.setupGlobalMessageHandler()
    
    // 检查登录状态并连接WebSocket
    this.checkLoginAndConnectWebSocket()
  },
  
  onShow() {
    console.log('小程序显示')
    this.setupGlobalMessageHandler()
    
    // 每次显示时检查WebSocket连接
    this.checkWebSocketConnection()
  },

  onHide() {
    console.log('小程序隐藏')
    this.cleanupGlobalMessageHandler()
  },

  onError(msg) {
    console.error('小程序错误:', msg)
  },

  addErrorListener() {
    // 监听未处理的Promise拒绝
    // process.on('unhandledRejection', (error) => {
    //   console.error('未处理的Promise拒绝:', error);
    // });

    // // 监听未捕获的异常
    // process.on('uncaughtException', (error) => {
    //   console.error('未捕获的异常:', error);
    // });
  },

  // 检查登录状态并连接WebSocket
  checkLoginAndConnectWebSocket() {
    try {
      const token = wx.getStorageSync('token')
      const userInfo = wx.getStorageSync('userInfo')
      
      console.log('检查登录状态:', { 
        hasToken: !!token, 
        hasUserInfo: !!userInfo 
      })

      if (token && userInfo) {
        console.log('检测到已登录用户，连接WebSocket')
        this.connectWebSocket(token, userInfo)
      } else {
        console.log('用户未登录，跳过WebSocket连接')
      }
    } catch (error) {
      console.error('检查登录状态失败:', error)
    }
  },

  // 检查WebSocket连接状态
  checkWebSocketConnection() {
    const status = webSocketManager.getConnectionStatus()
    
    console.log('WebSocket连接状态:', status)
    
    // 如果已登录但WebSocket未连接，尝试重新连接
    const token = wx.getStorageSync('token')
    const userInfo = wx.getStorageSync('userInfo')
    
    if (token && userInfo && (!status.websocket || !status.stompConnected)) {
      console.log('检测到连接断开，尝试重新连接WebSocket')
      this.connectWebSocket(token, userInfo)
    }
  },

  // 连接WebSocket
  async connectWebSocket(token, userInfo) {
    console.log('开始连接WebSocket...')
    
    try {
      await webSocketManager.connect(
        token,
        userInfo,
        // 消息处理回调
        (message) => {
          console.log('收到WebSocket消息:', message)
          this.handleWebSocketMessage(message)
        },
        // 错误处理回调
        (error) => {
          console.error('WebSocket连接错误:', error)
        }
      )
      console.log('WebSocket连接成功')
    } catch (error) {
      console.error('WebSocket连接失败:', error)
    }
  },

  // 处理WebSocket消息 - 移除去重逻辑
  handleWebSocketMessage(message) {
    console.log('处理WebSocket消息:', message)
    
    if (!message) return

    switch (message.type) {
      case 'WELCOME':
        console.log('收到欢迎消息:', message.content)
        if (message.content) {
          wx.showToast({
            title: message.content,
            icon: 'success',
            duration: 2000
          })
        }
        break
      case 'CHAT':
        this.handleChatMessage(message)
        break
      case 'SYSTEM':
        this.handleSystemMessage(message)
        break
      default:
        console.log('未知消息类型:', message)
    }
  },

  // 设置全局消息处理器
  setupGlobalMessageHandler() {
    webSocketManager.addGlobalHandler(this.handleGlobalMessage.bind(this))
    console.log('全局消息处理器已注册')
  },

  // 清理全局消息处理器
  cleanupGlobalMessageHandler() {
    webSocketManager.clearNotificationQueue()
  },

  // 全局消息处理函数 - 移除去重逻辑
  handleGlobalMessage(message) {
    console.log('App全局消息处理:', message)
    
    switch (message.type) {
      case 'SYSTEM':
        this.handleSystemMessage(message)
        break
        
      case 'APPLY':
      case 'APPOINTMENT':
        this.handleBusinessMessage(message)
        break
        
      case 'CHAT':
        this.handleChatMessage(message)
        break
        
      default:
        console.log('未处理的全局消息类型:', message.type)
    }
  },

  // 处理系统消息
  handleSystemMessage(message) {
    if (message.important) {
      wx.showModal({
        title: '重要系统通知',
        content: message.content,
        showCancel: false,
        confirmText: '知道了'
      })
    }
    
    // 更新全局状态
    this.updateGlobalState(message)
  },

  // 处理业务消息
  handleBusinessMessage(message) {
    this.updateBusinessBadge(message)
  },

  // 处理聊天消息
  handleChatMessage(message) {
    this.updateChatBadge(message)
  },

  // 更新全局状态
  updateGlobalState(message) {
    // 这里可以更新全局状态，比如未读消息数量等
    if (this.globalData) {
      this.globalData.lastMessageTime = Date.now()
    }
  },

  // 更新业务徽章
  updateBusinessBadge(message) {
    // 设置TabBar徽章
    try {
      const pages = getCurrentPages()
      const currentPage = pages[pages.length - 1]
      
      // 如果当前页面不是申请页面，显示徽章
      if (!currentPage.route.includes('apply')) {
        wx.setTabBarBadge({
          index: 2, // 假设申请页面在第三个tab
          text: '1'
        })
      }
    } catch (error) {
      console.error('更新业务徽章失败:', error)
    }
  },

  // 更新聊天徽章
  updateChatBadge(message) {
    try {
      const pages = getCurrentPages()
      const currentPage = pages[pages.length - 1]
      
      // 如果当前页面不是聊天页面，显示徽章
      if (!currentPage.route.includes('chatmessage')) {
        wx.setTabBarBadge({
          index: 1, // 假设消息页面在第二个tab
          text: '1'
        })
      }
    } catch (error) {
      console.error('更新聊天徽章失败:', error)
    }
  },

  // 获取全局WebSocket管理器
  getWebSocketManager() {
    return webSocketManager
  },

  // 气泡通知点击处理
  onBubbleNotificationTap(message) {
    console.log('气泡通知被点击:', message)
    
    switch (message.type) {
      case 'CHAT':
        this.navigateToChat(message)
        break
      case 'APPLY':
        this.navigateToApply()
        break
      case 'APPOINTMENT':
        this.navigateToAppointment()
        break
      default:
        this.navigateToMessageCenter()
    }
  },

  // 跳转到聊天页面
  navigateToChat(message) {
    wx.navigateTo({
      url: `/pages/userInfo/chatmessage/chatmessage?userId=${message.senderId || ''}`
    })
  },

  // 跳转到申请页面
  navigateToApply() {
    wx.switchTab({
      url: '/pages/apply/apply'
    })
  },

  // 跳转到预约页面
  navigateToAppointment() {
    wx.navigateTo({
      url: '/pages/appointment/appointment'
    })
  },

  // 跳转到消息中心
  navigateToMessageCenter() {
    wx.switchTab({
      url: '/pages/message/message'
    })
  },

  globalData: {
    userInfo: null,
    token: null,
    // 多个服务的baseUrl
    baseUrls: {
      user: 'http://localhost:8887/',
      house: 'http://localhost:8885/', 
      message: 'http://localhost:8886/',
      apply: 'http://localhost:8884/',
      chat: 'ws://localhost:8886/ws' 
    },
    picLocal:'http://localhost:8888/images',
    hasUnreadMessages: false,
    unreadCount: 0,
    lastMessageTime: null
  }
})